# 核心思想：把调用者当成傻子。复杂逻辑都写在内部，调用者无需关心
# 定义：接口是抽象方法的集合
# 方法一
# class Payment:
#     def pay(self):
#         #子类必须实现pay方法，否则就会报异常
#         raise NotImplementedError

#方法2
from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta):
    #声明Payment是一个抽象基类，抽象基类的好处就是它强制所有子类都遵循一个共同的接口，这样你就可以在不关心具体实现的情况下使用它们。
    #同时，它还可以提供一些通用的方法或属性，供所有子类共享
    #约束子类必须实现pay方法
    @abstractmethod
    def pay(self):
        pass
class Alipay(Payment):
    def pay(self,money):
        print("使用alipei支付%d元"%money)


class WeChatpay(Payment):
    def pay(self,money):
        print("使用微信支付%d元"%money)

if __name__ == '__main__':
    p1=Alipay().pay(30)
    p2=WeChatpay().pay(50)
